﻿using System.Runtime.InteropServices;

namespace Printer;

public class BartenderPrinterUtil
{
    public static void DoPrint(string templateName)
    {
        try
        {
            // 创建 BarTender.Application COM 对象实例
            dynamic btApp = Activator.CreateInstance(Type.GetTypeFromProgID("BarTender.Application"));
            // 设置 BarTender 为不可见（后台运行）
            btApp.Visible = false;
            // 打开标签文件
            // string labelPath = @"C:\Users\16893\Documents\BarTender\BarTender Documents\dp23s.btw"; // 模板路径  LabelFormatDocument
            string labelPath = GetBtwTemplatePath() + Path.DirectorySeparatorChar + templateName + ".btw";
            dynamic btFormat = btApp.Formats.Open(labelPath, false, "");
            // 设置标签中的变量（如果有）
            // btFormat.SetNamedSubStringValue("Field002", "wander");
            // 打印标签
            btFormat.PrintOut(false, false);
            // 关闭标签并释放资源
            btFormat.Close(0); // 0 = btDoNotSaveChanges
            // 退出 BarTender 应用程序
            btApp.Quit(0); // 0 = btSaveChanges
            // Console.OutputEncoding = Encoding.UTF8;
            Console.WriteLine("标签打印成功！");
            Marshal.ReleaseComObject(btFormat);
            Marshal.ReleaseComObject(btApp);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"打印失败：{ex.Message}");
        }
    }
    
    public static string GetBtwTemplatePath()
    {
        // 获取应用程序基目录（最可靠的方法）
        string baseDir = AppContext.BaseDirectory;
        // 组合 BtwTemplates 目录路径
        string templateDir = Path.Combine(baseDir, "BtwTemplates");
        // 规范化路径（处理相对路径、目录分隔符等）
        return Path.GetFullPath(templateDir);
    }
    
}